روش مستقیم که اغلب با نام روش تبدیل معکوس (Inverse Transform) نیز شناخته میشود، یکی از اصولیترین روشهای تولید متغیرهای تصادفی است. ویژگی اصلی این روش «مستقیم» بودن آن است؛ یعنی برخلاف روشهای مبتنی بر آزمون و خطا (مانند روش رد-پذیرش)، در اینجا هر عدد تصادفی یکنواخت (\(U\)) با یک نگاشت یکبهیک و قطعی، مستقیماً به یک متغیر تصادفی از توزیع هدف تبدیل میشود.
اصل حاکم بر این روش، قضیه تبدیل انتگرال احتمال است: اگر \(U \sim Uniform(0,1)\) باشد، آنگاه \(X = F^{-1}(U)\) دارای تابع توزیع تجمعی \(F\) خواهد بود.
در این بخش، دو توزیع را با این روش شبیهسازی میکنیم: 1. توزیع کوشی: که دارای معکوس تحلیلی ساده است. 2. توزیع t-استیودنت: که از روش مستقیم عددی (محاسبه معکوس توسط توابع داخلی) استفاده میکند.
توزیع کوشی نمونهای عالی برای روش مستقیم تحلیلی است، زیرا تابع توزیع تجمعی (CDF) آن فرم بسته دارد و معکوس کردن آن ساده است.
تابع توزیع تجمعی کوشی با پارامتر مکان \(\mu\) و مقیاس \(\sigma\):
\[F(x; \mu, \sigma) = \frac{1}{\pi} \arctan\left(\frac{x - \mu}{\sigma}\right) + \frac{1}{2}\]
برای یافتن فرمول مستقیم تولید \(X\)، معادله \(F(x) = U\) را حل میکنیم:
\[U = \frac{1}{\pi} \arctan\left(\frac{x - \mu}{\sigma}\right) + \frac{1}{2}\]
با جابجایی جملات و معکوس کردن تانژانت، به رابطه صریح زیر میرسیم که اساس شبیهسازی ماست:
\[X = \mu + \sigma \cdot \tan\left[\pi (U - 0.5)\right]\]
در توزیع \(t\)، فرم جبری CDF شامل انتگرالهایی (تابع بتای ناقص) است که به صورت تحلیلی ساده معکوس نمیشوند. اما همچنان روش ما «مستقیم» است، با این تفاوت که حل معادله \(F(x)=U\) توسط روشهای عددی دقیق انجام میشود.
در اینجا از تابع کوانتایل (Quantile Function) استفاده میکنیم. تابع
qt در زبان R، همان \(F^{-1}(U)\) است که مقدار \(U\) را مستقیماً به مقدار متناظر در توزیع t
مینگارد.
روش باکس-مولر نیز یک تکنیک هوشمندانه برای تولید متغیرهای نرمال است. این روش نیز در دسته روشهای تبدیل دقیق قرار میگیرد که با استفاده از ویژگیهای مختصات قطبی، دو متغیر یکنواخت را به دو متغیر نرمال تبدیل میکند.
این روش از دو متغیر یکنواخت \(U_1, U_2\) استفاده کرده و با تبدیلات زیر، دو متغیر نرمال استاندارد مستقل \(Z_1, Z_2\) تولید میکند:
\[Z_1 = \sqrt{-2\ln(U_1)} \cos(2\pi U_2)\] \[Z_2 = \sqrt{-2\ln(U_1)} \sin(2\pi U_2)\]
در کد زیر، علاوه بر تولید دادهها، با رسم نمودار هیستوگرام و نمودار چندک-چندک (QQ Plot) نرمال بودن دادهها را بررسی میکنیم.
set.seed(42)
U1 <- runif(1000)
U2 <- runif(1000)
Z1 <- sqrt(-2 * log(U1)) * cos(2 * pi * U2)
Z2 <- sqrt(-2 * log(U1)) * sin(2 * pi * U2)
hist(Z1, prob=TRUE)
curve(dnorm(x, mean=0, sd=1), add=TRUE, col="#f59e0b", lwd=3)##
## Shapiro-Wilk normality test
##
## data: Z1
## W = 0.9982, p-value = 0.3791
تفسیر نتایج شبیهسازی:
در نهایت، یک تبدیل خطی روی متغیر نرمال استاندارد \(Z_1\) اعمال میکنیم تا متغیری با میانگین و واریانس دلخواه بسازیم. اگر \(X = \sigma Z + \mu\) باشد، انتظار داریم میانگین ۱۹ و انحراف معیار ۳.۷ شود.
# تبدیل خطی: میانگین 19 و انحراف معیار 3.7
X1 <- 3.7 * Z1 + 19
hist(X1, prob=TRUE)
curve(dnorm(x, mean=19, sd=3.7), add=TRUE, col="#059669", lwd=3)##
## Shapiro-Wilk normality test
##
## data: X1
## W = 0.9982, p-value = 0.3791